package com.esender.api.filter.impl;

import com.esender.api.client.BeaconCacheClient;
import com.esender.api.filter.CheckFilter;
import com.esender.common.constant.CacheConstant;
import com.esender.common.enums.ExceptionEnums;
import com.esender.common.exception.ApiException;
import com.esender.common.model.StandardSubmit;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import java.util.List;

@Service(value = "ip")
@Slf4j
public class IPCheckFilter implements CheckFilter {
    @Autowired
    private BeaconCacheClient beaconCacheClient;
    private static final String IP_ADDRESS = "ipAddress" ;
    @Override
    public void check(StandardSubmit standardSubmit) {
        log.info("【接口模块-校验ip】   校验ing…………");
        // 1.根据客户得apiKey以及ipAddress去查询客户得IP白名单
        List<String> ip = (List<String>) beaconCacheClient.hget(CacheConstant.CLIENT_BUSINESS + standardSubmit.getApiKey(), IP_ADDRESS);
        // 这里得ip获取得是数据库存贮得的ip，本机测试不过，所以这里写死为127.0.0.1
        //ip = "127.0.0.1";
        standardSubmit.setIp(ip);
        // IP白名单为null直接放行
        if (CollectionUtils.isEmpty(ip) || ip.contains(standardSubmit.getRealIP())){
            log.info("【接口模块-校验ip】  客户端请求IP合法！");
            return;
        }
        //3. IP白名单不为空，并且客户端请求不在IP报名单内
        log.info("【接口模块-校验ip】  请求的ip不在白名单内");
        throw new ApiException(ExceptionEnums.IP_NOT_WHITE);
    }
}
